<?php

class Photoes extends Zend_Db_Table_Abstract {
	public $id;
	public $fname;
	public $ptype;
	public $refid;
	public $path;
	public $modname;
    protected $_name = 'photoes';
    
    function __construct($modname, $fieldArr = null) {
    	parent::__construct();
    	global $photoTypes;
    	$this->path = UPLOAD_PATH.$modname.'/';
    	$this->refid = $photoTypes[$modname];
    	$this->modname = $modname; 
    	if (is_null($fieldArr)) {
			$this->id=0;
			$this->fname = "";
			$this->ptype = 0;
		} else {
			$this->setDataFromDBArray($fieldArr);
		}
	}
    
	public function getArrayFromData($withkey=true) {
		$fieldArr = array(
			"fname" => $this->fname,
			"ptype" => $this->ptype,
			"refid" => $this->refid,
		);
		if ($withkey) $fieldArr["id"] = $this->id;
		return $fieldArr;
	}
	
	public function setDataFromArray($fieldArr) {
		$this->id = $fieldArr["id"];
		$this->fname = $fieldArr["fname"];
		$this->ptype = $fieldArr["ptype"];
		$this->refid = $fieldArr["refid"];
	}

	public function getDBArrayFromData($withkey=true) {
		$fieldArr = array(
			"fname" => $this->fname,
			"ptype" => $this->ptype,
			"refid" => $this->refid,
		);
		if ($withkey) $fieldArr["id"] = $this->id;
		$fieldArr = iconvObj($fieldArr, UTF_CHARSET, CP1251_CHARSET);
		return $fieldArr;
	}
	
	public function setDataFromDBArray($fieldArr) {
		$fieldArr = iconvObj($fieldArr, CP1251_CHARSET, UTF_CHARSET);
		$this->id = $fieldArr["id"];
		$this->fname = $fieldArr["fname"];
		$this->ptype = $fieldArr["ptype"];
		$this->refid = $fieldArr["refid"];
	}

	public function getPhotoes() 
    {
        $select = $this->getAdapter()->select()->from($this->_name);
        $select->order("fname");
		$stmt = $this->getAdapter()->query($select);
        $dataArr = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);    
		$result = array();
		foreach ($dataArr as $k=>$v) {
			$result[] = new Photoes($v);
		}
        return $result;
    }

    public function getPhoto($id) {
        $select = $this->getAdapter()->select()->from($this->_name);
        $select->where($this->_name.".id = ?", $id); 
        $stmt = $this->getAdapter()->query($select);
		$dataArr = $stmt->fetch(Zend_Db::FETCH_ASSOC);
		$this->setDataFromDBArray($dataArr);
        return $this;
    }

    public function getPhotoByRefid($refid) {
    	if ($refid) {
        	$select = $this->getAdapter()->select()->from($this->_name);
        	$select->where($this->_name.".refid = ?", $refid); 
        	$stmt = $this->getAdapter()->query($select);
			$dataArr = $stmt->fetch(Zend_Db::FETCH_ASSOC);
			$this->setDataFromDBArray($dataArr);
        	return $this;
    	}
    }
    
    function addFile($file) {
		//$uploadedData = $form->getValues();
        $fullFilePath = $file->getFileName();
		if ($fullFilePath) {
			$arr = explode(".", $fullFilePath);
			$ext = $arr[count($arr)-1];
			$this->fname = $ext;
			$photoData = $this->getDBArrayFromData(false);
			$res = $this->insert($photoData);
		}        
		$fname = $this->refid.'_photo.'.$ext;
		$fnameicon = $this->refid.'_photo_icon.'.$ext;
		$fnameview = $this->refid.'_photo_view.'.$ext;
		copy($fullFilePath, $this->path.$fname);
		$this->resizeImage($fullFilePath, $this->path.$fnameicon, 2);
		$this->resizeImage($fullFilePath, $this->path.$fnameview, 3);
		unlink($fullFilePath);
		//Zend_Debug::dump($uploadedData, '$uploadedData');
        //Zend_Debug::dump($fullFilePath, '$fullFilePath');
        //print_r($uploadedData);
        //echo $fullFilePath;

        //echo "done";
        //exit;
	}
    
	public function getPhotoImg($photo_type=0) {
		$ret = "";
		if ($this->fname) {
			$fname = $this->refid."_photo".((!$photo_type)?"_icon":"_view").".".$this->fname;
			$ret = "<img src='/data/".$this->modname."/".$fname."'>";
		}
		return $ret;
	}
	
	public function delPhotoesByRefid() {
		$this->delete("refid=".$this->refid);
	}
	
	function resizeImage($source, $output, $type = 2, $w = 0, $h = 0) {
		// f - имя файла 
		// type - способ масштабирования 
		// q - качество сжатия 
		// src - исходное изображение 
		// dest - результирующее изображение 
		// w - ширниа изображения 
		// ratio - коэффициент пропорциональности 
		// str - текстовая строка 
		
		// тип преобразования, если не указаны размеры 
		if ($type == 0) $w = 70;  // квадратная 70x70 
		if ($type == 1) $w = 52;  // квадратная 90x90 
		if ($type == 2) $w = 218; // пропорциональная шириной 218 
		if ($type == 3) $w = 536; // пропорциональная шириной 218 
		
		
		// качество jpeg по умолчанию 
		if (!isset($q)) $q = 100;
		
		
		
		// создаём исходное изображение на основе 
		// исходного файла и опеределяем его размеры 
		$src = imagecreatefromjpeg($source); 
		$w_src = imagesx($src); 
		$h_src = imagesy($src);
		
		
		// если размер исходного изображения 
		// отличается от требуемого размера 
		if ($w_src > $w) {
			// операции для получения прямоугольного файла 
		   if ($type==2||$type==3) { 
		       // вычисление пропорций 
		       $ratio = $w_src/$w; 
		       $w_dest = round($w_src/$ratio); 
		       $h_dest = round($h_src/$ratio); 
		
		       // создаём пустую картинку 
		       // важно именно truecolor!, иначе будем иметь 8-битный результат 
		       $dest = imagecreatetruecolor($w_dest,$h_dest); 
		       $str = ''; 
		       //imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src); 
		       imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
		        // определяем координаты вывода текста 
		        $size = 2; // размер шрифта 
		        $x_text = $w_dest-imagefontwidth($size)*strlen($str)-3; 
		        $y_text = $h_dest-imagefontheight($size)-3; 
		
		        // определяем каким цветом на каком фоне выводить текст 
		        $white = imagecolorallocate($dest, 255, 255, 255); 
		        $black = imagecolorallocate($dest, 0, 0, 0); 
		        $gray = imagecolorallocate($dest, 127, 127, 127); 
		        if (imagecolorat($dest,$x_text,$y_text)>$gray) $color = $black; 
		        if (imagecolorat($dest,$x_text,$y_text)<$gray) $color = $white; 
		
		        // выводим текст 
		        imagestring($dest, $size, $x_text-1, $y_text-1, $str,$white-$color); 
		        imagestring($dest, $size, $x_text+1, $y_text+1, $str,$white-$color); 
		        imagestring($dest, $size, $x_text+1, $y_text-1, $str,$white-$color); 
		        imagestring($dest, $size, $x_text-1, $y_text+1, $str,$white-$color); 
		
		        imagestring($dest, $size, $x_text-1, $y_text,   $str,$white-$color); 
		        imagestring($dest, $size, $x_text+1, $y_text,   $str,$white-$color); 
		        imagestring($dest, $size, $x_text,   $y_text-1, $str,$white-$color); 
		        imagestring($dest, $size, $x_text,   $y_text+1, $str,$white-$color); 
		
		        imagestring($dest, $size, $x_text,   $y_text,   $str,$color); 
		    }   
		
		    // операции для получения квадратного файла 
		    if (($type==0)||($type==1)) { 
		         // создаём пустую квадратную картинку 
		         // важно именно truecolor!, иначе будем иметь 8-битный результат 
		         $dest = imagecreatetruecolor($w,$w); 
		
		         // вырезаем квадратную серединку по x, если фото горизонтальное 
		         if ($w_src>$h_src) 
		         imagecopyresampled($dest, $src, 0, 0,
		                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
		                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); 
		                         
				 
		                          
		
		         // вырезаем квадратную верхушку по y, 
		         // если фото вертикальное (хотя можно тоже серединку) 
		         if ($w_src<$h_src) { 
		         	imagecopyresampled($dest, $src, 0, 0, 0,
	                 round((max($w_src,$h_src)-min($w_src,$h_src))/2),
	                 $w, $w, min($w_src,$h_src), min($w_src,$h_src));
	                 
	               # вырезание
		         /*imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w,
		                          min($w_src,$h_src), min($w_src,$h_src));*/	
		         }
		         
		         // квадратная картинка масштабируется без вырезок 
		         if ($w_src==$h_src) 
		         imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $w, $w_src, $w_src); 
		     } 
		
			// вывод картинки и очистка памяти 
			imagejpeg($dest, $output, $q); 
			imagedestroy($dest); 
			imagedestroy($src);
		} else {
			copy($source, $output);
		}
	} 	
	
}